package com.example.datachange.config;

import com.example.datachange.mapper.DictionaryMapper;
import com.example.datachange.model.Stars_dictionary_v1_7;
import com.stars.datachange.model.response.DataDictionaryResult;
import com.stars.datachange.module.DataDictionary;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;

/**
 * 自定义数据字典配置
 * TODO： 如果需要modelName逻辑，该配置文件可以去掉，默认数据字典配置即可满足{@link com.stars.datachange.module.DefaultDataDictionary}。
 * TODO： 如果觉得默认数据字典不能满足需求，也可以重写更可靠的数据字典
 *
 * @author Hao.
 * @version 1.0
 * @since 2021/12/27 15:46
 */
@Component
public class DataDictionaryConfig implements DataDictionary {

    @Resource
    private DictionaryMapper dictionaryMapper;

    /**
     * V1.7.0
     * @author Hao.
     * @date 2024/7/19 10:14
     * @param key modelName 可以根据自己的需求来使用，如不使用，对应的是全部字典表数据
     * @return Set<DataDictionaryResult>
     */
    @Override
    public Set<DataDictionaryResult> dataDictionary(String key) {
        Set<DataDictionaryResult> result = new HashSet<>();
        final List<Stars_dictionary_v1_7> list = dictionaryMapper.findList();
        final Map<String, List<Stars_dictionary_v1_7>> map = list.stream().collect(Collectors.groupingBy(Stars_dictionary_v1_7::getName));
        map.forEach((key1, value) -> {
            final DataDictionaryResult data = new DataDictionaryResult();
            data.setName(key1);
            data.setMaps(new LinkedHashSet<>());

            // 当前字典（字段）的数据
            value.forEach(oo -> {
                data.getMaps().add(DataDictionaryResult.Map.builder().code(oo.getCode()).value(oo.getValue()).build());
            });
            result.add(data);
        });
        return result;
    }
}
